#ifndef NANE_ICODECSYSTEM_H
#   define  NANE_ICODECSYSTEM_H

#   include "nane/core/ISubSystem.h"
#   include "nane/core/IInput.h"
#   include "nane/core/IOutput.h"
#   include "nane/core/IRefCounted.h"

namespace nane 
{
    struct IDecoder
        : public IInput
    {
    };
    
    struct IEncoder
        : public IOutput
    {
    };
    
    struct ICodecSystem
        : public ISubSystem
    {
        virtual const char* GetFileType() = 0;
        
        virtual IDecoder* CreateDecoder( IInputRef* _input ) = 0;
        virtual void ReleaseDecoder( IDecoder* _decoder ) = 0;
        
        virtual IEncoder* CreateEncoder( IOutputRef* _output ) = 0;
        virtual void ReleaseEncoder( IEncoder* _encoder ) = 0;
    };
}   // namespace nane

#endif	// NANE_ICODECSYSTEM_H
